package cn.com.djin.ssm.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;

/**
 * 
 * @author djin 基础Mapper代理对象
 * @param <T>
 *            实体类的泛型
 */
public interface BaseMapper<T> {

	/**
	 * 添加
	 * 
	 * @param t
	 *            实体对象
	 * @return 添加的结果
	 * @throws Exception
	 */
	Integer insert(T t) throws Exception;

	/**
	 * 修改任意字段
	 * 
	 * @param t
	 *            实体对象
	 * @return 修改的结果
	 * @throws Exception
	 */
	Integer updateByPramas(@Param("t") T t) throws Exception;

	/**
	 * 根据id删除单个
	 * 
	 * @param id
	 *            数据id
	 * @return 删除结果
	 * @throws Exception
	 */
	Integer deleteById(String id) throws Exception;

	/**
	 * 根据id批量删除
	 * 
	 * @param objs
	 *            id数组
	 * @return 删除结果
	 * @throws Exception
	 */
	Integer deleteBatch(String[] objs) throws Exception;

	/**
	 * 查询所有
	 * 
	 * @return 对象集合
	 * @throws Exception
	 */
	List<T> queryAll() throws Exception;

	/**
	 * 根据id查询单个结果集对象
	 * 
	 * @param id
	 *            对象id
	 * @return 单个结果集对象
	 * @throws Exception
	 */
	T queryObjectById(String id) throws Exception;

	/**
	 * 根据有（无）分页查询数据
	 * 
	 * @param t
	 *            条件对象
	 * @param currentRecord
	 *            当前数据数
	 * @param limit
	 *            每一页显示的记录条数
	 * @return 实体对象集合
	 * @throws Exception
	 */
	List<T> queryListByPramas(@Param("t") T t, @Param("currentRecord") Integer currentRecord,
			@Param("limit") Integer limit) throws Exception;
	
	List<T> queryListByPramas(@Param("t") T t) throws Exception;

	/**
	 * 根据有（无）分页查询数据条数
	 * 
	 * @param t
	 *            条件对象
	 * @return 数据总的记录条数
	 * @throws Exception
	 */
	Long queryTotalByPramas(@Param("t") T t) throws Exception;

	/**
	 * 根据多个条件查询单个数据
	 * 
	 * @param t
	 *            条件对象参数
	 * @return 数据对象
	 * @throws Exception
	 */
	T queryObjectByPramas(@Param("t") T t) throws Exception;

	// 根据条件（无条件）查询多个结果集
	List<T> queryManyByPramas(@Param("t") T t) throws Exception;
}
